/**
 * 
 */
package de.midnightdance.admin.vorteile;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.List;

import de.cbf.util.ui.editentities.controller.ControllerEditEntities;
import de.cbf.util.ui.editentities.interfaces.ICompositeEditEntities;
import de.cbf.util.ui.editentities.interfaces.IEditableEntity;
import de.midnightdance.admin.util.WebServiceProvider;
import de.midnightdance.admin.ws.WebServiceAdminRequiem;
import de.midnightdance.admin.ws.entities.RequiemUser;
import de.midnightdance.admin.ws.entities.VorteilDB;
import de.midnightdance.admin.ws.entities.arrays.VorteilDBArray;

/**
 * @author Stefan Alter
 *
 */
public class PresenterEditVorteile extends ControllerEditEntities{
	
	private WebServiceAdminRequiem port;
	//
	private RequiemUser user;
	
	private PCLVorteile pclVorteile;
	private ListenerSaveNewVorteile listenerSaveNewVorteile;
	
	public PresenterEditVorteile() {
		super();
		port = WebServiceProvider.getWebService();
		//
		setControllerEditEntity(new PresenterEditVorteil());
		//
		listenerSaveNewVorteile = new ListenerSaveNewVorteile();
		registerSaveEditListener(listenerSaveNewVorteile);
	}
	
	public void initData() {
		VorteilDBArray array;		
		System.out.println("Loading Vorteile...");
		array = port.getVorteile(user);
		List<VorteilDB> vorteile = array.getItem();
		setEntities(vorteile.iterator());				
	}
	
	public void saveNewVorteile() {
		System.out.println("Now saving new Vorteile...");
		for (IEditableEntity entity : entities) {
			if (entity instanceof VorteilDB) {
				VorteilDB vorteilDB = (VorteilDB) entity;
				saveVorteil(vorteilDB);
			}
		}		
	}
	
	private void saveVorteil(VorteilDB vorteilDB){
		int result = port.addVorteil(vorteilDB, user);
		if(result != 0){
			System.err.println("Adding of Vorteil "+vorteilDB + " failed");
		}
		
	}
	
	@Override
	protected boolean checkEntity(IEditableEntity value)
			throws IllegalArgumentException {
		return (value instanceof VorteilDB);
	}

	@Override
	protected boolean checkView(ICompositeEditEntities value)
			throws IllegalArgumentException {
		return (value instanceof CompositeEditVorteile);		
	}

	@Override
	protected PropertyChangeListener getEntityChangedListener() {
		return pclVorteile;
	}

	@Override
	protected IEditableEntity getNewEntity() {		
		return new VorteilDB();
	}
	
	/**
	 * @return the user
	 */
	public RequiemUser getUser() {
		return user;
	}

	/**
	 * @param user the user to set
	 */
	public void setUser(RequiemUser user) {
		this.user = user;
	}

	private class PCLVorteile implements PropertyChangeListener{
		@Override
		public void propertyChange(PropertyChangeEvent evt) {
			view.setEntities(entities.iterator());			
		}		
	}

	private class ListenerSaveNewVorteile implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
			saveNewVorteile();			
		}		
	}

	

	

	
}
